package free_test_3;

import java.io.*;

/**
 * SerializeDemo 类演示了如何对实现了 Serializable 接口的对象进行序列化和反序列化操作
 */
public class SerializeDemo {
    /**
     * 程序入口点，演示对象的序列化和反序列化过程
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建User对象，用于演示序列化
        User user = new User("颜free", 22, "武装直升机");

        // 序列化对象到文件
        try {
            // 创建文件输出流，指定输出文件为 user.ser
            FileOutputStream fileOut = new FileOutputStream("user.ser");
            // 创建对象输出流，包装文件输出流
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            // 将User对象写入到输出流中（序列化）
            out.writeObject(user);
            // 关闭对象输出流
            out.close();
            // 关闭文件输出流
            fileOut.close();
            // 输出提示信息，表明序列化数据已保存
            System.out.println("Serialized data is saved in user.ser");
        } catch (IOException i) {
            // 捕获并打印IO异常
            i.printStackTrace();
        }

        // 从文件反序列化对象
        try {
            // 创建文件输入流，读取 user.ser 文件
            FileInputStream fileIn = new FileInputStream("user.ser");
            // 创建对象输入流，包装文件输入流
            ObjectInputStream in = new ObjectInputStream(fileIn);
            // 从输入流中读取对象并强制转换为User类型（反序列化）
            User deserializedUser = (User) in.readObject();
            // 关闭对象输入流
            in.close();
            // 关闭文件输入流
            fileIn.close();

            // 输出反序列化的结果
            System.out.println("Deserialized User:");
            System.out.println(deserializedUser);
        } catch (IOException i) {
            // 捕获并打印IO异常
            i.printStackTrace();
        } catch (ClassNotFoundException c) {
            // 捕获并打印类未找到异常（当序列化的类不存在时抛出）
            System.out.println("User class not found");
            c.printStackTrace();
        }
    }
}